Ch 9.htm

назад | содержание | вперед

Чтение данных

Чтение данных из файла последовательного доступа выполняется с помощью функции Input и операторов Input # и Line Input #. Рассмотрим эти функции и операторы.

Функция Input имеет следующий синтаксис:

Input(number, #fileNumber)

где:

- number — целое число, которое задает количество считываемых из файла символов;
- fileNumber — номер файла, аналогичный номеру файла в операторе open.

Функция Input считывает из файла заданное количество символов и обычно используется для чтения данных, записанных в файл оператором print #.

> Замечание

> Следует иметь в виду, что функция input требует знания количества считываемых символов. Поэтому для чтения данных из файла необходимо предварительно вычислить его длину с помощью функции FileLen.

Если в программе требуется прочитать данные из файла, в котором информация в строках имеет структуру с разделителями (в качестве разделителей используются запятые), необходимо применить оператор Input #:

Input #fileNumber, varlist

где:

- fileNurnber — номер файла, аналогичный номеру файла в операторе open;
- varlist — список переменных.

При работе этого оператора сначала считывается целая строка, а затем подстроки, отделенные разделителями (запятыми), помещаются в соответствующие переменные списка. Для корректной работы оператора строки файла должны иметь заданную структуру с разделителями. Обычно этот оператор используется в паре с оператором записи write #.

Для чтения всего содержимого файла при помощи оператора Input # необходимо организовать циклическое считывание данных из файла, поскольку данные считываются этим оператором по строкам.

Для построчного чтения данных из последовательного файла применяется оператор Line Input #. Синтаксис этого оператора следующий:

Line Input # fileNurnber, varName

где:

- fileNurnber — номер файла, аналогичный номеру файла в операторе open;
- varName — имя переменной.

Оператор Line Input # посимвольно считывает всю строку данных из файла и помещает ее в строковую переменную. При этом разделителем строк в файле служит стандартный разделитель строк символ возврата каретки CHR(13) или последовательность символов возврата каретки и перевода строки CHR(13) + CHR(10), причем в переменную varName эти разделители не вставляются.

> Замечание

> Обычно оператор Line Input # используется в паре с оператором Print #.

Для того чтобы прочитать все данные из файла при помощи оператора Line Input #, необходимо организовать цикл чтения данных.

Для изучения функций и операторов, предназначенных для работы с файлами, создадим небольшое приложение. Выполните следующие действия:

1. Создайте новый стандартный проект. Для этого в меню File (Файл) выберите команду New Project (Создать новый) и в окне выбора типа проекта дважды щелкните мышью на значке Standard EXE.

2. Присвойте проекту имя MyFileProject. Используйте для этого окно свойств проекта, которое можно вызвать командой Project1 Properties (Свойства Project1) меню Project (Проект). После переименования проекта эта команда именуется MyFileProject Properties (Свойства MyFileProject).

3. Для выбора файлов потребуются диалоговые окна открытия и сохранения файлов. С помощью диалогового окна Components (Компоненты), вызываемого командой Components меню Project (Проект), подключите к проекту библиотеку Microsoft Common Dialog Control 6.0 и нажмите кнопку ОК.

4. Переименуйте форму проекта, присвоив ей название FormForFile.

5. В свойство caption формы введите заголовок Работаем с файлами.

6. Добавьте в форму элемент управления типа TextBox для ввода/вывода данных и присвойте ему имя txtFile. Придайте текстовому полю достаточно большие размеры, чтобы оно занимало практически все пространство формы. Установите свойство поля Multi-Line в значение True.

7. Добавьте в форму элемент управления CommonDialog, дважды щелкнув мышью кнопку CommonDialog на панели элементов управления.

> Совет

> Если панель элементов управления отсутствует на экране, для ее отображения в меню View (Вид) выберите команду ToolBox (Панель инструментов).

8. Присвойте созданному объекту типа CommonDialog имя cdCommonDialog.

9. Для фильтрации файлов в свойство Filter объекта cdCommonDialog введите следующий текст: Все файлы (*. *) |*. * | Текстовые файлы (*. txt) \ *. txt \.

10. Добавьте В форму FormForFile кнопку управления типа CommandButton,

дважды щелкнув мышью кнопку CommandButton на панели элементов управления.

11. После появления объекта в форме назовите эту кнопку cbstart и присвойте свойству Caption значение Выполнить. Созданная в форме кнопка cbstart будет служить для выполнения действий по событию кнопки Click.

Созданное тестовое приложение показано на рис. 9.2.

Полученное приложение можно теперь использовать для изучения работы с файлами. Запрограммируем приложение на чтение данных из файла последовательного доступа. Для этого откроем окно редактора кода и введем следующий код:

Dim strFileName As String

Dim strFileContent As String

Dim nFreeFile As Integer

Dim nFileLenght As Integer

Private Sub cbStart_Click()

cdCommonDialog.ShowOpen

strFileName = cdCommonDialog.FileName

nFreeFile = FreeFile

If strFileName <> "" Then

Open strFileName For Input As nFreeFile

nFileLenght = FileLen(strFileName)

strFileContent = Input(nFileLenght, #nFreeFile)

txtFile.Text = strFileContent

Close

End If

End Sub

Рис. 9.2. Вид приложения для изучения функций работы с файлами

Работающее приложение показано на рис. 9.3. В данном случае при нажатии кнопки Выполнить открывается диалоговое окно поиска файла. Путь и имя файла, возвращаемое диалоговым окном, хранятся в переменной strFileName. Найденный файл (он должен быть текстовым) открывается при помощи оператора open для чтения данных. Функция input считывает сразу весь файл в переменную strFileContent, содержимое которой затем помещается в текстовое поле txtFile. После выполнения всех действий файл закрывается оператором close.

Чтобы прочитать данные при помощи оператора Line Input #, необходимо заменить текст кода, расположенный сразу после оператора open, на следующий:

Do While Not EOF(nFreeFile)

Line Input #nFreeFile, strFileContent

txtFile.Text = txtFile.Text + strFileContent +Chr$(13) + Chr$(10) Loop Close

В этом цикле данные из файла построчно считываются в переменную strFileContent и помещаются в текстовое поле txtFile. Цикл работает до достижения конца файла, который контролируется функцией EOF. Применение цикла не требует знания длины файла, что иногда предпочтительнее.

Рис. 9.3. Считывание данных из файла

Для изучения работы оператора input # добавьте в форму еще одно текстовое поле. Назовите его txtNumber И установите свойство поля DataFormat

в значение Number. Текст в приложении после оператора open необходимо заменить на следующий:

Dim nFileContent As Integer

Input #nFreeFile, strFileContent, nFileContent

txtFile.Text = strFileContent

txtNumber.Text = nFileContent

Close

Рис. 9.4. Считывание данных из строк файла в переменные

Работающее приложение показано на рис. 9.4. При этом строки открываемого файла имеют структуру, аналогичную следующей строке:

Это файл для проверки функций, 100

то есть текст и число расположены через запятую.

назад | содержание | вперед